home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
byte0887.arc
/
LANE.ARC
/
PARSE80.ARI
< prev
next >
Wrap
Text File
|
1987-05-05
|
3KB
|
85 lines
% Subject: PARSE80.ARI - from A. Lane: "Simulating an 8085 with Prolog"
% Use DCG to parse a command (request) from the simple monitor.
%
% Intended to be used with TOKENS.ARI (5/10/86)
%
% Basically want to implement following commands:
% Examples:
%
% change --+-- memory-address ---- value (change 002c 3f)
% +-- register-contents ---- value (change d 2c)
% +-- register-pair-pointer ---- value (change pc 0f3)
% help (a screen of help) (help)
% quit (back to DOS) (quit)
% reset (all parameters to some intial state) (reset)
% show --+-- register-contents (show b)
% +-- contents of reg-pair-pointer (show bc)
% +-- <memory, no range specified> (show)
% +-- starting-memory-address (show 0020)
% +-- starting-address --- ending-address (show 0020 002f)
% step (step)
% trace (trace)
%
parse_tokens(change(Adr,Val)) --> verb(change), address(Adr), byte(Val).
parse_tokens(change(Reg,Val)) --> verb(change), register_name(Reg), byte(Val).
parse_tokens(change(RegPair,Val)) --> verb(change), pointer(RegPair), byte(Val).
parse_tokens(change(Flag,Value)) --> verb(change), flag(Flag), flag_value(Value)
.
parse_tokens(show(Reg)) --> verb(show), register_name(Reg).
parse_tokens(show(Group)) --> verb(show), group_designation(Group).
parse_tokens(show(RegPair)) --> verb(show), pointer(RegPair).
parse_tokens(show(Start,End)) --> verb(show), address(Start), address(End),
{ Start =< End }.
parse_tokens(show(Start)) --> verb(show), address(Start).
parse_tokens(help(Topic)) --> verb(help), verb(Topic).
parse_tokens(step(Times)) --> verb(step), byte(Times).
parse_tokens(my_trace(Times)) --> verb(my_trace), byte(Times).
parse_tokens(Command) --> verb(Command), { Command \== change }.
address(Adr) --> [Adr], { Adr >= 0, top_of_memory(TOM), Adr =< TOM }.
byte(Val) --> [Val], { Val >= 0, Val < 256 }.
flag_value(X) --> [X], { X == 1; X == 0 }.
register_name(a) --> [a]. register_name(b) --> [b].
register_name(c) --> [c]. register_name(d) --> [d].
register_name(e) --> [e]. register_name(h) --> [h].
register_name(l) --> [l]. register_name(flags) --> [f];[fl];[flags].
flag(z) --> [z]. flag(s) --> [s]. flag(p) --> [p].
flag(cy) --> [cy]. flag(ac) --> [ac].
group_designation(all) --> [al];[all].
group_designation(regs) --> [r];[re];[regs].
group_designation(stack) --> [st];[stack].
pointer(bc) --> [bc]. pointer(de) --> [de].
pointer(pc) --> [p];[pc]. pointer(sp) --> [s];[sp].
pointer(hl) --> [hl];[m];[me];[mem].
verb(change) --> [c];[ch];[change];[set]. % 'set' is a synonym
verb(status) --> [state]. % must say 'state'
verb(help) --> [h];[he];[help].
verb(quit) --> [q];[qu];[quit].
verb(show) --> [sh];[show].
verb(step) --> [st];[step].
verb(my_trace) --> [t];[tr];[trace].
verb(reset_processor) --> [r];[re];[reset].
% end PARSE80.ARI